package com.jiufen.Controller;


import com.jiufen.Exception.RemainingStudentsException;
import com.jiufen.Pojo.*;
import com.jiufen.Service.ClazzService;
import com.jiufen.anno.LogOperate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * 班级类controller
 * add by jiufen
 */
@Slf4j
@RestController
@RequestMapping("/clazzs")
public class ClazzController {

    @Autowired
    private ClazzService clazzService;

    /**
     * 分页查询班级信息
     * @param clazzQueryParam
     * @return
     */
    @GetMapping
    public Result getClassList(ClazzQueryParam clazzQueryParam) {
        log.info("Paging query class information parameters:--{}",clazzQueryParam);
        PageResult<Clazz> clazzList =  clazzService.getClazzList(clazzQueryParam);
        log.info("班级信息查询结束，返回结果={}",clazzList);
        return Result.success(clazzList);
    }

    /**
     * 查询班级信息(无参数)
     * @return
     */
    @GetMapping("/list")
    public Result getClassListNew() {
        List<Clazz> clazzList =  clazzService.getClazzListNew();
        return Result.success(clazzList);
    }

    /**
     * 新增班级信息
     * 3.3 添加班级
     * 3.3.1 基本信息
     * 请求路径：/clazzs
     * 请求方式：POST
     * 接口描述：该接口用于添加班级信息
     */
    @LogOperate
    @PostMapping()
    public Result saveClass(@RequestBody Clazz clazz) {
        log.info("Add class information parameters:--{}",clazz);
        Integer result = clazzService.saveClass(clazz);
         return Result.success();
    }

    /**
     * 根据ID查询班级信息
     * 3.4 根据ID查询
     * 3.4.1 基本信息
     * 请求路径：/clazzs/{id}
     * 请求方式：GET
     * 接口描述：该接口用于根据主键ID查询班级的信息
     */
    @GetMapping("/{id}")
    public Result getClassById(@PathVariable Integer id) {
        log.info("根据ID查询班级信息参数：--{}",id);
        Clazz clazz = clazzService.getClassById(id);
        return Result.success(clazz);
    }

    /**
     * 3.5 修改班级
     * 3.5.1 基本信息
     * 请求路径：/clazzs
     * 请求方式：PUT
     * 接口描述：该接口用于修改班级的数据信息
     */
    @LogOperate
    @PutMapping
    public Result updateClass(@RequestBody Clazz clazz){
        log.info("修改班级信息参数：--{}",clazz);
        Integer result = clazzService.updateClass(clazz);
        return Result.success();
    }

    /**
     * 3.2 删除班级
     * 3.2.1 基本信息
     * 请求路径：/clazzs/{id}
     * 请求方式：DELETE
     * 接口描述：该接口用于删除班级信息
     */
    @LogOperate
    @DeleteMapping("/{id}")
    public Result deleteClass(@PathVariable Integer id) throws RemainingStudentsException {
        log.info("删除班级信息参数：--{}",id);
        Integer result = clazzService.deleteClass(id);
        return Result.success();
    }
}
